package com.yyb.aspectj;

import com.yyb.annotation.AppPermission;
import com.yyb.constants.CoreConstant;
import com.yyb.exception.BusinessException;
import com.yyb.utils.ServletUtils;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 
 * 
 * 
 */
@Component
@Aspect
@EnableAspectJAutoProxy
@Order(0)
public class PermissionAspect {
    /**
     * 前置切入
     */
    @Before(value = "@annotation(permission)")
    public void authPermission(AppPermission permission) {
        // 获取注解中的权限值
        String value = permission.value();
        // 获取当前会话中的权限列表
        List<String> permissions = (List<String>) ServletUtils.getSession().getAttribute(CoreConstant.PERMISSIONS_KEY);
        // 判断当前会话中的权限列表是否包含注解中的权限值
        if(!permissions.contains(value)){
            // 如果不包含，则抛出异常
            throw new BusinessException("您没有权限,请联系管理");
        }
    }
}
